package com.zues.thread.design_mode.guarded_stop;

import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.util.List;
import java.util.Set;

/**
 * 模拟设计模式：保护性暂停
 * 两个线程交互结果的一种设计模式
 * 通过保护类可以让线程1 等待 线程2 的下载结果之间做其他操作
 * @author zues
 * @date 2021/8/26
 */
@Slf4j(topic = "c.TestGuardedDemo1")
public class TestGuardedDemo1 {

    //线程1 等待 线程2 的下载结果
    public static void main(String[] args) {
//        GuardedObject guardedObject = new GuardedObject(1);
//
//
//        new Thread(() -> {
//            //等待结果
//            log.debug("等待结果");
//            Object result = guardedObject.get(20000);
//            log.debug("结果:{}", result);
//        }, "t1").start();
//
//
//        new Thread(() -> {
//            log.debug("执行下载");
//            try {
//                List<String> list = DownLoader.downLoad();
//                guardedObject.complete(list);
//            } catch (IOException e) {
//                throw new RuntimeException(e);
//            }
//
//        }, "t2").start();

        System.out.println(" ==============邮递员送信测试=================== ");


        for (int i = 0; i < 3; i++) {
            new People().start();
        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        Set<Integer> ids = MailBoxes.getIds();
        for (Integer id : ids) {
            new Postman(id, "mail内容" + id).start();
        }

    }

}
